Cut empty CHANGELOG stubs, lint release-notes, document the flow#491
Merged
RhysSullivan merged 1 commit intomainfrom May 4, 2026
Merged
Cut empty CHANGELOG stubs, lint release-notes, document the flow#491RhysSullivan merged 1 commit intomainfrom
RhysSullivan merged 1 commit intomainfrom
Conversation
The 31 workspace CHANGELOG.md files were all stubs — either a single package-name header or a four-line "this exists for changesets compat" note. Changesets has been configured with `changelog: false` for a long time, and an empirical run of `bun run changeset:version` against a tree with no CHANGELOG.md files produced no regenerated files. They're noise. This PR: - Deletes all 31 workspace CHANGELOG.md files. The user-facing release notes live at apps/cli/release-notes/ and stay there. - Adds scripts/check-release-notes.ts. Validates apps/cli/release-notes/next.md and rejects forbidden Thanks attribution: @claude, @Anthropic, @claude-bot, @github-actions, @dependabot, @renovate, @RhysSullivan, @rhys-sullivan. Adapted from openclaw's check-changelog-attributions.mjs. Wired up as `bun run lint:release-notes`. - Updates RELEASING.md to document the single-source-of-truth model (next.md is canonical), the section structure, the attribution rules, and the changeset-vs-release-notes distinction. - Updates the cli-release skill (.skills/cli-release/SKILL.md) with the same conventions so future agent runs follow them. Verified: - `bun run lint` clean - `bun run lint:release-notes` clean against current next.md, fails cleanly when @claude is added - `bun run test:release:bootstrap` passes (the release pipeline doesn't reference CHANGELOG.md anywhere) - `grep CHANGELOG` across .github/workflows/, scripts/, .changeset/, and apps/cli/src/release.ts returns nothing — no stale references
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
executor-marketing | 497a607 | Commit Preview URL Branch Preview URL |
May 04 2026, 05:32 AM |
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
executor-cloud | 497a607 | May 04 2026, 05:33 AM |
@executor-js/cli
@executor-js/config
@executor-js/execution
@executor-js/sdk
@executor-js/storage-core
@executor-js/codemode-core
@executor-js/runtime-quickjs
executor
@executor-js/plugin-file-secrets
@executor-js/plugin-google-discovery
@executor-js/plugin-graphql
@executor-js/plugin-keychain
@executor-js/plugin-mcp
@executor-js/plugin-onepassword
@executor-js/plugin-openapi
commit: |
3 tasks
RhysSullivan
added a commit
that referenced
this pull request
May 4, 2026
#491 deleted 31 empty workspace CHANGELOG.md files based on an empirical test that they weren't regenerated. That test only exercised the changesets *CLI*. The `changesets/action@v1` GitHub Action wrapping the CLI in `release.yml` ALSO reads each bumped package's CHANGELOG.md to build the Version Packages PR description, and crashes with ENOENT when any of them is missing. Concretely, after #491 + #495 merged to main, release.yml failed: Error: ENOENT: no such file or directory, open '/home/runner/work/executor/executor/apps/cli/CHANGELOG.md' at file:///home/runner/work/_actions/changesets/action/v1/dist/index.js:61:49311 Restoring all 31 stubs unblocks the release workflow. The stubs are required by tooling, not by humans — they hold one-line "this exists for changesets compatibility" disclaimers and never get release content. Updates RELEASING.md and .skills/cli-release/SKILL.md to explain why the stubs exist so this regression doesn't recur.
4 tasks
RhysSullivan
added a commit
that referenced
this pull request
May 4, 2026
…orward (#499) release.yml failed again on the latest main with the same ENOENT — this time on `packages/core/vite-plugin/CHANGELOG.md`. That package and `packages/plugins/example` were added in #476 (Spec-driven plugin loading) without stubs, after my restore PR (#496) only put back the files #491 had deleted. Drift was inevitable as soon as the next package landed. This PR: - Adds the two missing stubs. - Adds `scripts/check-changelog-stubs.ts` and wires it into `bun run lint`. Fails CI when any workspace package directory lacks a CHANGELOG.md, with a clear message explaining why the stubs exist (changesets/action@v1 reads them) and pointing at the `--fix` flag. - `--fix` mode auto-creates stubs with a templated body. So the next time someone adds a package, lint flags it in PR rather than release.yml crashing later.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The 31 workspace
CHANGELOG.mdfiles were all stubs — either a one-line package-name header or a four-line "this exists for changesets compat" note. Changesets is configured withchangelog: false, and an empirical run ofbun run changeset:versionagainst a tree with no CHANGELOG.md files regenerated nothing. They're noise.CHANGELOG.mdfiles.scripts/check-release-notes.tsandbun run lint:release-notes. Adapted from openclaw'scheck-changelog-attributions.mjs. Rejects forbidden Thanks attribution (@claude,@anthropic,@claude-bot,@github-actions,@dependabot,@renovate,@rhyssullivan,@rhys-sullivan).RELEASING.mdand.skills/cli-release/SKILL.mdto document the single-source-of-truth model:apps/cli/release-notes/next.mdis canonical user-facing changelog; changesets are version-bump bookkeeping. They have different audiences and shouldn't be conflated.Why
Before this PR, every user-facing change required two things: a
.changeset/*.md(for the version bump) and an edit toapps/cli/release-notes/next.md(for users). The 31 empty per-package CHANGELOG.md files implied changesets was authoring real per-package histories — it wasn't, and they were never filled in. This removes the dual-maintenance illusion and makes the actual flow explicit.Pattern reference
scripts/check-changelog-attributions.mjs)Highlights / Fixes / Breaking changeswith single-line bullets)Test plan
bun run lint— clean (616 files)bun run lint:release-notes— clean against currentnext.md, fails cleanly when forbidden Thanks added (verified manually)bun run test:release:bootstrap— passes; release pipeline doesn't touch CHANGELOG.md anywheregrep CHANGELOGacross.github/workflows/,scripts/,.changeset/, andapps/cli/src/release.ts— no stale referencesbun run changeset:versionagainst a fake changeset, confirmed no files were regenerated